﻿namespace ZuoAlgorithms.Class003;


// 本文件的实现是用int来举例的
// 对于long类型完全同理
// 不过要注意，如果是long类型的数字num，有64位
// num & (1 << 48)，这种写法不对
// 因为1是一个int类型，只有32位，所以(1 << 48)早就溢出了，所以无意义
// 应该写成 : num & (1L << 48)
public class BinarySystem
{
    // 打印一个int类型的数字，32位进制的状态
    // 左侧是高位，右侧是低位
    public static void PrintBinary(int num)
    {
        for (int i = 31; i >= 0; i--)
        {
            // 下面这句写法，可以改成 :
            // Console.WriteLine((a & (1 << i)) != 0 ? "1" : "0");
            // 但不可以改成 :
            // Console.WriteLine((a & (1 << i)) == 1 ? "1" : "0");
            // 因为a如果第i位有1，那么(a & (1 << i))是2的i次方，而不一定是1
            // 比如，a = 0010011
            // a的第0位是1，第1位是1，第4位是1
            // (a & (1<<4)) == 16（不是1），说明a的第4位是1状态
            Console.WriteLine((num & (1 << i)) == 0 ? "0" : "1");
        }
    }

}
